#pragma once
#include <boost/any.hpp>
template <class entity_type>
class State
{
public:

  virtual ~State(){}

  //this will execute when the state is entered
  virtual void Enter(entity_type*)=0;

  //this is the states normal update function
  virtual void Execute(entity_type*)=0;

  //this will execute when the state is exited.
  virtual void Exit(entity_type*)=0;

  virtual bool OnMessage(entity_type*,boost::any p)=0;

};